package movepaint.utils;

import javax.swing.*;
import java.io.*;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.Map;

/**
 * Classe utilitaire qui regroupe plusieurs méthodes annexe.
 *
 * @author Paulino A.
 * @version 1.0
 */
 public class Utilitaire {
 	/**
	 *	Methode qui permet de charger une image à partir
	 * 		de <i>chemin</i> donné en argument.
	 *		<br>
	 *		Elle vérifit si l'image est présente à l'adresse <i>chemin</i>
	 *		et si on possède les droits pour y accéder.
	 *		<br>
	 *		Si c'est le cas, on charge l'image et on retourne sa reference.
	 *
	 *
	 *	@param chemin
	 *			Le chemin relatif ou absolu de l'image
	 *
	 *	@return
	 *			<ul>
	 *				<li>L'image sous forme d'un ImageIcon.</li>
	 *				<li>null si elle echoue à un des deux tests (NotExists ou CannotRead).</li>
	 *			</ul>
	 *
	 **/
	public static ImageIcon chargerImage(String chemin) {
		File image = new File(chemin);
		ImageIcon imageIco = null;

		if (image.exists())
			if (image.canRead())
				imageIco = new ImageIcon(chemin);

		return imageIco;
	}

	/**
	 *	Methode qui vérifit si un champ est vide ou non.
	 *		Lorsque le champ n'est remplit que d'espaces, il est
	 *		considéré comme vide.
	 *
	 *	@param champ
	 *		Le champ a tester.
	 *
	 *	@return
	 *			<b>true</b> - Le champ contient des données
	 *			<br>
	 *			<b>false</b> - sinon.
	 **/
	public static boolean checkField(JTextField champ) {
   		StringTokenizer st = new StringTokenizer(champ.getText());
   		if (st.countTokens() > 0)
   			return true;
   		else
   			return false;
	}

	/**
	 *	Methode qui vérifit si une chaine est vide ou non.
	 *		Lorsque la chaine n'est composée que d'espaces, elle est
	 *		considérée comme vide.
	 *
	 *	@param chaine
	 *		La chaine a tester.
	 *
	 *	@return
	 *			<b>true</b> - La chaine contient des caractères autre que des
	 *							espaces
	 *			<br>
	 *			<b>false</b> - sinon.
	 **/
	public static boolean checkField(String chaine) {
   		StringTokenizer st = new StringTokenizer(chaine);
   		if (st.countTokens() > 0)
   			return true;
   		else
   			return false;
	}


	/**
	 *	Cette méthode vérifie si le lien donné en argument est formé de cette
	 *		sorte: "http://<i><link></i>"
	 *
	 *	@param link
	 *			Le lien a verifier
	 *
	 *	@return
	 *			true s'il contient le suffixe "http://", false sinon.
	 **/
	public static Boolean checkLink(String link) {
		return link.startsWith("http://");
	}


 	/**
 	 *	Banalise les doubles quotes d'une chaîne
 	 *
 	 *	@param src La chaîne ou l'on banalise les quotes
 	 *	@return la chaîne avec les doubles quotes banalisés
 	 */
     public static String addSlashes(String src){
        return src.replace("\"", "\\\"");
    }

	/**
	 *	Récupere l'ensemble des look and feels sous forme de Map,
	 *		dont les clefs sont les noms des L&F et les valeurs
	 *		les noms des classes correspondantes.
	 *
	 *	@return
	 *		Map qui contient les L&F disponibles
	 */
	public static Map<String, String> getLookAndFeelsMap(){
	   UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();
	   Map <String, String>map = new TreeMap<String, String>();
	   for(int i=0; i<info.length;i++){
	      String nomLF = info[i].getName();
	      String nomClasse = info[i].getClassName();
	      map.put(nomLF,nomClasse);
	   }

	   // Ajout des L&F personnels
	   map.put("Kunststoff","com.incors.plaf.kunststoff.KunststoffLookAndFeel");
	   map.put("JGoodies Plastic 3D","com.jgoodies.looks.plastic.Plastic3DLookAndFeel");
	   map.put("JGoodies Plastic XP","com.jgoodies.looks.plastic.PlasticXPLookAndFeel");

	   return map;
	}
 }